package com.lixia.lxframework.framework.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

/**
 * ID生成器工具类
 *
 * @时间: 2019/11/11 10:26
 * @author: Mr.wang
 */
public class IdUtils {

    /**
     * 获取随机UUID
     *
     * @return UUID
     */
    public static String randomUUID() {
        return UUID.randomUUID().toString();
    }

    /**
     * 获取不包含-的随机UUID
     *
     * @return UUID
     */
    public static String simpleUUID() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

    /**
     * 获取当前时间的时间戳
     *
     * @return
     */
    public static String getTimeInMillis() {
        long timeInMillis = Calendar.getInstance().getTimeInMillis();
        return timeInMillis + "";
    }

    /**
     * 获取位数为7位的随机数
     *
     * @return 数字类型随机数
     */
    public static String sevenRandomNumbers() {
        Random random = new Random();
        int nextInt = random.nextInt(9000000);
        nextInt = nextInt + 1000000;
        return nextInt + "";
    }

    /**
     * 获取位数为7位的随机数
     *
     * @param prefix 前缀
     * @return 前缀+7位数字随机数
     */
    public static String sevenRandomNumbers(String prefix) {
        Random random = new Random();
        int nextInt = random.nextInt(9000000);
        nextInt = nextInt + 1000000;
        return prefix + nextInt;
    }

    /**
     * 获得20位的主键值，13位的当前时间戳+7位的随机数
     *
     * @return 随机数
     **/
    public static String twentyRandomUUID() {
        return getTimeInMillis() + sevenRandomNumbers();
    }

    /**
     * 获得21位的主键值，主键值的格式是14位的当前时间加7位的随机数
     *
     * @return 随机数
     **/
    public static String twentyOneRandomUUID() {
        return getTimeYearMonthDay("yyyyMMddHHmmss") + sevenRandomNumbers();
    }

    /**
     * 根据输入的前缀 + 21位随机数
     *
     * @param prefix 前缀
     * @return 随机数
     */
    public static String twentyOneRandomUUID(String prefix) {
        return prefix + twentyOneRandomUUID();
    }

    /**
     * 输入日期格式，返回格式内的内容，输入格式以-分隔
     *
     * @param dateFormat 格式化
     * @return 随机数
     **/
    public static String getTimeYearMonthDay(String dateFormat) {
        String[] strNow = new SimpleDateFormat(dateFormat).format(new Date()).split("-");
        StringBuilder str = new StringBuilder();
        for (String string : strNow) {
            str.append(string);
        }
        return str.toString();
    }
}
